/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Parser.Validador;

import Utilidades.*;

/**
 *
 * @author Administrador
 */
public class ValidadorTagAutoContenido implements IValidador {
    private String str;
    private ValidadorVariables vVariables;

    /**
     * Constructor sin parámetros que crea un ValidadorVariables
     */
    public ValidadorTagAutoContenido() {
        this.vVariables = new ValidadorVariables();
    }

    public boolean validar(String str) {
        boolean resultado = true;
        this.str = str;
        this.vVariables.clear();

        try {

            if (VerificadorStrings.esInicioFin(str, "<", "/>") == false) {
                resultado = false;
            }
            else if (VerificadorStrings.estaVacia(str, "<", "/>") == true) {
                resultado = false;
            }
            else if (Balance.esBalanceada(str, '"', '"') == false) {
                resultado = false;
            }
            else if (VerificadorStrings.tieneMasDe(str, "<", 1, true) == true) {
                resultado = false;
            }
            else if (VerificadorStrings.tieneMasDe(str, ">", 1, true) == true) {
                resultado = false;
            }
            else if (VerificadorStrings.tieneMasDe(str, "?", 0, true) == true) {
                resultado = false;
            }
            else if (VerificadorStrings.tieneMasDe(str, "-", 0, true) == true) {
                resultado = false;
            }
            else if (VerificadorStrings.tieneMasDe(str, "!", 0, true) == true) {
                resultado = false;
            }
            else if (VerificadorStrings.tieneMasDe(str, "/", 1, true) == true) {
                resultado = false;
            }
            else if (this.variablesOK() == false) {
                resultado = false;
            }
            else if (VerificadorStrings.validarNombreTag(str, "<", "/>") == false) {
                resultado = false;
            }

        } catch (Exception e) {
            resultado = false;
        } finally {
            return resultado;
        }
    }

    private boolean variablesOK() {
        boolean resultado = true;
        String[] array = StrOp.separar(str, " ", "<", "/>", '"', '"');

        for (int i = 0; i < array.length; i++) {
            String sAux = array[i];
            if (i != 0 && sAux != null && sAux.equals("") == false) {
                boolean bAux = this.vVariables.validar(sAux);
                if (bAux == false) {
                    resultado = false;
                    break;
                }
            }
        }
        return resultado;
    }

}
